package com.bjxst;
/**IO 输入与输出（Input/Output）
 *输入（Input）：可以让程序从外部系统获得数据（核心含义是“读”，读取外部数据）：
 常见应用：1，读取硬盘的文件内容到程序。例如：播放器打开一个视频文件、word打开一个doc
    读取网络上某个位置内容到程序。 例：浏览器中输入网址后，打开该网址对应的网页；下
    载网络上某个网址的文件（从外部获取）
 2，读取数据库系统的数据   3，读取某些硬件系统数据到程序。例如：车载电脑读取雷达扫描信息到程序；温控系统等
 *输出（Output）：程序输出数据给外部系统从而可以操作外部系统（核心含是"写",将数据写出到外部系统）
 * 常见应用：1，将数据写到硬盘中，例如：我们编辑完一个word文档后，将内容写到硬盘上进行保存
 *    2，将数据写到数据库系统中，例如：我们注册一个网站会员，实际就是后台程序向数据库中定入一条记录
 *    3，将数据写到某些硬件系统中，例如：导弹系统导航程序新的路径输出到控子系统，
 *    飞控子系统根据数据修正飞行路径
 * */
/*流的概念：流是一个抽象、动态的概念，是一连串连续动态的数据集合
    对于输入流而言，数据源就像水箱，流（stream）就像水管中流动着的水流，程序就是我们最终的用户，我
 们最终的用户，我们通过流将数据源（source）中的数据（information）输送到程序（program）中
    对于输出流而言，目标数据的目的地（dest），我们通过流（A Stream）将程序（program）中的数据（information）
    输送到目的数据（dest）中
* */
 //注 ： 输入与输出的划分是相对程序而言的，并不是相对数据源
public class IO00 {
    /*InputStream/OutputStream和Reader/Write类是所有IO流类的抽象父类
    * InputStream此抽象类是表示字节输入流的所有类的父类，InputStream是一个抽象类，它不可以
    * 实例化，数据的读取需要由它的子类来实现，根据节点的不同，它派生了不同的节点流子类
    *   继承自InputStream的流程是用于向程序中输入数据，且数据的单位为字节（8 bt）
    * 常用的方法:
    * int  read() : 读取一个字节的数据，并将字节的值作为int类型返回（0-255之间的一个值）
    * 如果未读出字节则返-1（返回值为-1表示读取结束）
    * ovid close() : 关闭输入流对象，释放相关系统资源 (用完必须关闭这个流，否则会一直在内存中)*/

    /*OutputStream ：此抽象为是表示字节输出流的所有类的父类，输出流接收输出字节将这些
    * 字节发送到某个目的地  常用的方法:
    * void write(int n): 向目的地中写入一个字节
    * void close() : 关闭输出流对象，释放相关系统资源*/

    /*Read ：用于读取的字符流抽象类，数据单位为字符
    *int read():   读取一个字符的数据，并将字符的值作为int 类型返回（0-65535之间的一个值，即Unicode值）。
    * 如果未读出字符则返回-1（返回值为-1表示读取结束）
    * void close() : 关闭输出流对象，释放相关系统资源*/

    /*Write:用于读取的字符流抽象类，数据单位为字符
    *void write(int n): 向输出流中写入一个字符
    *void close() : 关闭输出流对象，释放相关系统资源*/

    //java中流的概念细分
    /*输入流：数据流从 数据源 到 程序（以InputStream、read结尾的流）
    * 输出流：数据流从 程序 到 目的地（OutPutStream、Write结尾的流）*/

    /*字节流：以字节为单位获取数据，命名上以stream结尾的流一般是字节流，如：
       FileInputStream、FileOutputStream
       当我们读取 二进制类型 的图片、影音时，用字节流
       字符流：以字符为单位获取数据，命名上以Reader/Writer结尾的流一般是字符流，
       如：FileReader、FileWrite
       读取某个文件，文件是以文本内容形式读进来，用字节流
    */

    //按处理对象不同分类
    /*节点流：可以可以直接从数据源或目的地读写数据，如：FileInputStream、
       FileReader、DataInputStream等
      处理流：不直接连接到数据源或目的地，是“处理流的流”，通过对其他流的处理提高
      程序的性能，如：BufferedInputStream、Buffered等。处理流也叫包装流。
     */

    //IO流类的体系  很多流都都是成对出现
    // （以Stream结尾的为字节流，以Reader/Writer结尾为字符流
    /*1，InputStream/OutputStream    字节流的抽象类
    * 2，Reader/Writer  字符流的抽象类
    * 3，FileInputStream/FileOutputStream  节点流：以字节为单位直接操作“文件”
    * 4，ByteArrayInputStream/ByteArrayOutputStream
       节点流：以字节为单位直接的对象
      5，ObjectInputStream/ObjectOutputStream
      * 处理流：以字节为单位直接操作"对象”

    * 6，DataInputStream/DataOutputStream
    * 处理流：以字节为单位直接操作“基本数据类型与字符串类型”
      7,FileReader/FileWriter
      * 节点流：以字符为单位直接操作“文本文件”（注意:只能读写文本文件）
      8，BufferedReader/BufferedWriter
      * 处理流：将Reader/writer对象进行包装，增加缓存功能，提高读写效率
      9，BufferedInputStream/BufferedOutputStream
      * 处理流：将InputStream/OutputStream对象进行包装，增加缓存功能，提高读写效率
      10，InputStreamReader/OutputStreamWriter
      * 处理流：将字节流对象转化成字符流对象
      11，PrintStream
      * 处理流：将OutputStream进行包装，可以方便地输出字符，更加灵活
      *
     */

}
